// 由于 webpack 是基于 Node 进行构建的，所以 webpack 的配置文件中 任何合法的 node 代码 都是支持的
const path = require('path');

/* 
    在内存中，根据指定的模板页面，生成一份内训中的手游，同事将东打包好的 bundle.js 注入到页面底部
    如果要配置插件，需要在导出的对象中，挂在一个 plugins 节点
*/
const htmlWebpackPlugin = require('html-webpack-plugin');


// 当以命令行形式运行 webpack 或者 webpack-dev-server 的时候，工具会发现，项目中并没有提供 要打包的文件的 入口 和 出口文件
// 此时 会检查项目根目录中的额配置文件 并读取这个文件，就可以读取到 导出的这个配置对象，然后根据这个对象打包构建
module.exports = {
    entry: path.join(__dirname, './src/main.js'), // 项目入口文件
    output: {
        path: path.join(__dirname, './dist'), // 设置项目输出文件路径
        filename:'bundle.js',  // 指定输出文件的名称
    },
    plugins: [  // 所有的 webpack 插件的配置节点
        new htmlWebpackPlugin({
            template: path.join(__dirname, './src/index.html'),
            filename: 'index.html',
        }),
    ],
    module: {  // 配置所有第三方 loader 模块
        rules: [ // 第三方模块的匹配规则
            { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, // 处理 css 样式文件的loader
            { test: /\.less$/, use: [ 'style-loader', 'css-loader', 'less-loader' ] },// 处理 less 样式文件的loader
            // { test: /\.scss$/, use: [ 'style-loader', 'css-loader', 'sass-loader' ] },// 处理 less 样式文件的loader },
            { test: /\.(jpg|png|gif|bmp|jpeg)$/, use: 'url-loader?limit=197141&name=[hash:8]-[name].[ext]' } , // 处理 图片路径 的 loader
            /* 
                limit 给定的值 是图片的大小，单位是 Byte,如果我们引用的图片 大于 或等于给定的 limit 值，则不会转为base64格式的字符串，
                如果 图片小于给定的 limit 值，则会被转换为 base64 的字符串;
                name=[name].[ext]:图片原来叫什么名字，还叫什么，以及后缀名，编码是为了防止重名
            */
           { test: /\.(ttf|eot|svg|woff|woff2)$/, use:'url-loader' }, // 处理字体文件

           { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }, // 这是配置 Babel 来转换高级的 ES6 语法

           { test: /\.vue$/, use: 'vue-loader' },  // 处理 .vue 文件
        
        ]
    },
    resolve:{
        alias:{ // 设置 Vue 被导入时的包的路径
            // "vue$": "vue/dist/vue.js",
        }
    }
};